package fr.afcepf.al23.qualite.data;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import javax.sql.DataSource;

import fr.afcepf.al23.qualite.entity.Utilisateur;

/**
 * Classe des requetes concernant l'utilisateur,
 * qui implémente l'interface IDaoUtilisateur.
 */
public class DaoUtilisateur implements IDaoUtilisateur {

    /**
     * Instanciation de la dataSource.
     */
    private DataSource ds = new QualiteDataSource();

    /**
     * Requete pour se connecter.
     */
    private final String reqConnection = "SELECT * FROM Utilisateur "
            + "WHERE mail=? AND mdp=?";

    /**
     * Indice du paramètre de la requête de connexion pour le 'mail'.
     */
    private final int indiceParamMailReqConnect = 1;

    /**
     * Indice du paramètre de la requête de connexion pour le 'mdp'.
     */
    private final int indiceParamMdpReqConnect = 2;

    /**
     * Nom de la colonne 'id' de la table 'Utilisateur'.
     */
    private final String colonneId = "id";

    /**
     * Nom de la colonne 'nom' de la table 'Utilisateur'.
     */
    private final String colonneNom = "nom";


    /**
     * Nom de la colonne 'mail' de la table 'Utilisateur'.
     */
    private final String colonneMail = "mail";


    /**
     * Nom de la colonne mdp de la table 'Utilisateur'.
     */
    private final String colonneMdp = "mdp";

    /**
     * Nom de la colonne 'adresse' de la table 'Utilisateur'.
     */
    private final String colonneAdresse = "adresse";

    @Override
    public Utilisateur seConnecter(String paramMail, String paramMdp) {
        Utilisateur user = null;
        Connection cnx = null;
        try {
            cnx = ds.getConnection();
            PreparedStatement pstmt = cnx.prepareStatement(reqConnection);
            pstmt.setString(indiceParamMailReqConnect, paramMail);
            pstmt.setString(indiceParamMdpReqConnect, paramMdp);
            ResultSet rs = pstmt.executeQuery();
            if (rs.next()) {
                user = rsToUtilisateur(rs);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                cnx.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

        return user;
    }

    /**
     * Instancie l'utilisateur et lui attribut le résultat de la
     * requete de connexion.
     * @throws SQLException sql exception
     * @param paramRs le resultSet
     * @return un user
     */
    private Utilisateur rsToUtilisateur(ResultSet paramRs) throws SQLException {
        Utilisateur user = new Utilisateur(paramRs.getInt(colonneId),
                paramRs.getString(colonneNom),
                paramRs.getString(colonneMail), paramRs.getString(colonneMdp),
                paramRs.getString(colonneAdresse));
        return user;
    }

    @Override
    public Utilisateur enregistrer(Utilisateur paramUtil) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public Boolean verifMail(String paramMail) {
        // TODO Auto-generated method stub
        return null;
    }

}
